<html>
    <head>
        <title>创建后台作业</title>
    </head>
    <body>
        <script>
             /*
                        三、创建后台作业

                               后台作业是一个实现 IBackgroundJob<TArgs>接口 或 派生自 BackGroundJob<TArgs>类的类。
                               
                               TArgs 是一个简单的普通C#类来存储"作业数据"。

                               此示例用于在后台发送电子邮件：
                                    
                               1、作业参数类 (普通C#类)：
                                                首先,定义一个类来存储后台作业的参数：
                                                namespace MyProject
                                                {
                                                    // 一个C#普通类，来存储"作业数据"：
                                                    public class EmailSendingArgs
                                                    {
                                                        public string RecipientEmailAddress { get; set; }
                                                        public string Subject { get; set; }
                                                        public string Body { get; set; }
                                                    }
                                                } 

                               2、后台作业类 (派生自AsyncBackgroundJob<TArgs>)：
                                             然后创建一个使用EmailSendingArgs对象发送电子邮件的后台作业类：
                                                using System.Threading.Tasks;
                                                using Volo.Abp.BackgroundJobs;
                                                using Volo.Abp.DependencyInjection;
                                                using Volo.Abp.Emailing;

                                                namespace MyProject
                                                {
                                                    public class EmailSendingJob
                                                        : AsyncBackgroundJob<EmailSendingArgs>, ITransientDependency  // 创房后台作业
                                                        // EmailSendingArgs 自定义参数类型(包含需要处理的Ids集合)
                                                    {
                                                        private readonly IEmailSender _emailSender;

                                                        public EmailSendingJob(IEmailSender emailSender)
                                                        {
                                                            _emailSender = emailSender; // 注入邮件发送服务
                                                        }

                                                        // 重写 ExecuteAsync 方法
                                                        public override async Task ExecuteAsync(EmailSendingArgs args)
                                                        {
                                                            await _emailSender.SendAsync(
                                                                args.EmailAddress,
                                                                args.Subject,
                                                                args.Body
                                                            );
                                                        }
                                                    }
                                                }

                                            此作业仅用 IEmailSender 发送电子邮件 (请参阅电子邮件发送模块文档)。

                                            AsyncBackgroundJob<TArgs> (异步后台作业)用于创建需要"执行异步调用"的作业.
                                            
                                            如果方法不需要执行任何一部调用，你可以从 BackgroundJob<TArgs> 派生。

                                4、异常处理  Exception Handling 

                                        后台作业不应隐藏异常.

                                        如果抛出异常，后台作业会在计算的等待时间后"自动重试"。

                                        仅当你不想为当前参数重新运行后台作业时灿隐藏异常。

                    */

        </script>
    </body>
</html>